/**
 * 
 */
package com.gwcloud.leetcode.tags.backtrace;

import java.util.LinkedList;
import java.util.List;
/**
 * @ClassName   : Leetcode046 
 * @author      : ganwei 
 * @date        : 2020年5月5日
 * @Description : Leetcode046 全排列
 */
public class Leetcode0046 {
	private List<List<Integer>> result = new LinkedList<>();
	/**
	 * -解题思路，利用回溯(递归)解决的经典问题之一
	 */
    public List<List<Integer>> permute(int[] nums) {
    	LinkedList<Integer> track = new LinkedList<Integer>();
    	backtrack(nums, track);
    	return result;
    	
    }
    
    public void backtrack(int[] nums, LinkedList<Integer> track){
    	if(track.size() >= nums.length){
    		result.add(new LinkedList<Integer>(track));
    		return;
    	}
    	
    	for(int i = 0; i < nums.length; i++){
    		if(track.contains(i)){
    			continue;
    		}
    		track.add(nums[i]);
    		backtrack(nums,track);
    		track.removeLast();
    	}
    }
    
    /**
     * -主函数
     */
    public static void main(String[] args){
    	
    }
}
